from django.http import HttpResponse
from models import Movie
from django.shortcuts import render_to_response
import types

try:
    import feasibility
except ImportError:
    print 'You need to install the feasibility package!'

try:
    import io_m
except ImportError:
    print 'You need to install the io_m package!'

try:
    import imdb
except ImportError:
    print 'You need to install the IMDbPY package!'

_spec_chars = [u'\xc1',u'\xe1',u'\xc0',u'\xc2',u'\xe0',u'\xc2',u'\xe2',u'\xc4',u'\xe4',u'\xc3',u'\xe3',u'\xc5',u'\xe5',u'\xc6',u'\xe6',u'\xc7',u'\xe7',u'\xd0',u'\xf0',u'\xc9',u'\xe9',u'\xc8',u'\xe8',u'\xca',u'\xea',u'\xcb',u'\xeb',u'\xcd',u'\xed',u'\xcc',u'\xec',u'\xce',u'\xee',u'\xcf',u'\xef',u'\xd1',u'\xf1',u'\xd3',u'\xf3',u'\xd2',u'\xf2',u'\xd4',u'\xf4',u'\xd6',u'\xf6',u'\xd5',u'\xf5',u'\xd8',u'\xf8',u'\xdf',u'\xde',u'\xfe',u'\xda',u'\xfa',u'\xd9',u'\xf9',u'\xdb',u'\xfb',u'\xdc',u'\xfc',u'\xdd',u'\xfd',u'\xff',u'\xa9',u'\xae',u'\u2122',u'\u20ac',u'\xa2',u'\xa3',u'\u2018',u'\u2019',u'\u201c',u'\u201d',u'\xab',u'\xbb',u'\u2014',u'\u2013',u'\xb0',u'\xb1',u'\xbc',u'\xbd',u'\xbe',u'\xd7',u'\xf7',u'\u03b1',u'\u03b2',u'\u221e']

def unicodeValid(str):
    return (type(str) in (types.StringType, types.UnicodeType))

def cleanspec(s, cleaned=_spec_chars):
    return ''.join([(c in cleaned and ' ' or c) for c in s])

def viewMovies(request):
    
    variables = {"movies":Movie.objects.all()}
    return render_to_response("movies\\movies.html",variables)
     
def indexMovie(request):
    return HttpResponse("Hello World!")

def initMovies(request):
    i = imdb.IMDb()
    top250 = i.get_top250_movies()
    for ml in top250:
        m = Movie(name=ml['long imdb title'])
        m.save()
        
    print "Movie DB initialized"
    
    variables = {"movies":Movie.objects.all()}
    return render_to_response("movies\\movies.html",variables)

def matchMovie(request):
    movies = request.GET.getlist(u'movieList')
    tempMovies = []
    for m in Movie.objects.all():
        if(m.name not in movies):
            tempMovies += [cleanspec(m.name)]
    variables = {"matches":feasibility.COR_algorithm(io_m.getWeightingAlg(), io_m.getScoringAlg(), movies, tempMovies[:10])}
    return render_to_response("movies\\match.html",variables)
    
